﻿// Copyright (c) Inossem. All rights reserved.
// Licensed under the LGPL-3.0 license. See LICENSE file in the project root for full license information.
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace DWF.Studio.ScriptEngine.Custom
{
    public class StartupProperties
    {
        public StartupProperties(IDictionary dict)
        {
            // 系统设置参数
            IsLogToFile = _GetProjectProperty(Sysconfig.IsLogToFile, dict) == "1";
            IsConsoleOutToFile = _GetProjectProperty(Sysconfig.IsConsoleOutToFile, dict) == "1";
            IsSilentExecution = _GetProjectProperty(Sysconfig.IsSilentExecution, dict) == "1";
            // 脚本运行信息设置参数
            projectName = _GetProjectProperty(ScriptPath.projectName, dict);
            scriptFileName_WithoutExtension = _GetProjectProperty(ScriptPath.scriptFileName_WithoutExtension, dict);
        }

        /*** 系统设置参数 ***/
        public bool IsLogToFile { get; private set; }
        public bool IsConsoleOutToFile { get; private set; }
        public bool IsSilentExecution { get; private set; }
        //public bool IsOutToUI { get; private set; }  //是否输出信息到UI界面
        /// <summary>
        /// 系统设置参数
        /// </summary>
        public struct Sysconfig
        {
            public const string IsLogToFile = "IsLogToFile";
            public const string IsConsoleOutToFile = "IsConsoleOutToFile";
            public const string IsSilentExecution = "IsSilentExecution";
        }

        /*** 脚本运行信息设置参数 ***/
        public string projectName { get; private set; }
        public string scriptFileName_WithoutExtension { get; private set; }
        /// <summary>
        /// 脚本运行信息设置参数
        /// </summary>
        public struct ScriptPath
        {
            public const string projectName = "projectNameForStartup";
            //public const string projectVersion = "projectVersion";
            public const string scriptFileName_WithoutExtension = "scriptFileNameWithoutExtensionForStartup";
        }


        private string _GetProjectProperty(string key, IDictionary dict)
        {
            string result = string.Empty;
            if (dict != null && dict.Contains(key))
            {
                result = dict[key].ToString();
            }
            return result;
        }

        #region IDisposable Support
        private bool disposedValue = false; // 要检测冗余调用

        protected virtual void Dispose(bool disposing)
        {
            if (!disposedValue)
            {
                if (disposing)
                {
                    //// TODO: 释放托管状态(托管对象)。
                    //SyncContext.Dispose();
                    //_namedPipeClient.Disconnnect();
                }

                // TODO: 释放未托管的资源(未托管的对象)并在以下内容中替代终结器。
                // TODO: 将大型字段设置为 null。

                disposedValue = true;
            }
        }

        // TODO: 仅当以上 Dispose(bool disposing) 拥有用于释放未托管资源的代码时才替代终结器。
        // ~ExcutionContext()
        // {
        //   // 请勿更改此代码。将清理代码放入以上 Dispose(bool disposing) 中。
        //   Dispose(false);
        // }

        // 添加此代码以正确实现可处置模式。
        public void Dispose()
        {
            // 请勿更改此代码。将清理代码放入以上 Dispose(bool disposing) 中。
            Dispose(true);
            // TODO: 如果在以上内容中替代了终结器，则取消注释以下行。
            // GC.SuppressFinalize(this);
        }
        #endregion
    }
}
